#include "TcpServer.hpp"
#include "Dict.hpp"
#include "Command.hpp"

std::string defaulthandler(const std::string &word, InetAddr &addr)
{
    std::string res = "this is a test for: " + word;
    return res;
}

// 命令行格式提示函数
void Usage(std::string proc)
{
    std::cerr << "输入格式错误, 正确格式为: " << proc << " port" << std::endl;
}

int main(int argc, char *argv[])
{
    // 检查输入命令行格式是否正确
    // 正确格式: ./TcpServer 8080
    if (argc != 2)
    {
        Usage(argv[0]);
        exit(ExitCode::USAGE_ERR); // 输入格式错误, 设置对应退出码
    }

    // 输入格式正确, 获取server端口号
    uint16_t port = std::atoi(argv[1]); // 由命令行获取端口号

    // 1. 字典应用
    /* Dict d;       // 字典实例化
    d.LoadDict(); // 加载字典文件

    // 成功获取端口号, 开始创建TcpServer实例
    std::unique_ptr<TcpServer> tsvr = std::make_unique<TcpServer>(
        port,
        [&d](const std::string &word, InetAddr &addr)
        {
            return d.Translate(word, addr); // 调用字典翻译函数
        }); */

    // 2. 远程shell应用
    Command cmd;

    std::unique_ptr<TcpServer> tsvr = std::make_unique<TcpServer>(
        port,
        [&cmd](const std::string &command, InetAddr &addr)
        {
            return cmd.Execute(command, addr); // 调用命令执行函数
        });

        
    tsvr->Init(); // TcpServer初始化
    tsvr->Run();  // TcpServer启动

    return 0;
}